const { spawn } = require('child_process')
const path = require('path')
const net = require('net')

console.log('启动 VitePress 和统计服务...')

// 检查端口是否可用
function isPortAvailable(port) {
  return new Promise((resolve) => {
    const server = net.createServer()
    server.listen(port, () => {
      server.close()
      resolve(true)
    })
    server.on('error', () => {
      resolve(false)
    })
  })
}

// 启动服务
async function startServices() {
  // 检查端口 3001 是否可用
  const portAvailable = await isPortAvailable(3001)
  if (!portAvailable) {
    console.error('端口 3001 已被占用，请先停止其他服务')
    process.exit(1)
  }

  // 启动统计服务
  const analyticsServer = spawn('node', ['analytics-server.js'], {
    cwd: __dirname,
    stdio: 'inherit'
  })

  // 等待统计服务启动
  setTimeout(() => {
    console.log('统计服务已启动，正在启动 VitePress...')
    
    // 启动 VitePress - 使用 npx 或直接调用 vitepress
    const vitepress = spawn('npx', ['vitepress', 'dev', 'src'], {
      cwd: path.join(__dirname, '..'),
      stdio: 'inherit',
      shell: true // 在 Windows 上使用 shell
    })
    
    // 处理进程退出
    process.on('SIGINT', () => {
      console.log('正在关闭服务...')
      analyticsServer.kill('SIGINT')
      vitepress.kill('SIGINT')
      process.exit(0)
    })
    
    process.on('SIGTERM', () => {
      console.log('正在关闭服务...')
      analyticsServer.kill('SIGTERM')
      vitepress.kill('SIGTERM')
      process.exit(0)
    })
    
    // 监听子进程退出
    analyticsServer.on('close', (code) => {
      console.log(`统计服务已退出，退出码: ${code}`)
      vitepress.kill('SIGINT')
    })
    
    vitepress.on('close', (code) => {
      console.log(`VitePress 已退出，退出码: ${code}`)
      analyticsServer.kill('SIGINT')
    })
    
  }, 2000) // 等待2秒确保统计服务启动

  // 处理错误
  analyticsServer.on('error', (error) => {
    console.error('统计服务启动失败:', error)
    process.exit(1)
  })
}

// 启动服务
startServices().catch(error => {
  console.error('启动服务失败:', error)
  process.exit(1)
}) 